Skip to content

refactor: remove vscode dependencies from dbtIntegration #1697

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 126 commits into
base: master
Choose a base branch
from

Conversation

mdesmet
Copy link
Contributor

@mdesmet mdesmet commented Jun 24, 2025

Overview

Problem

Describe the problem you are solving. Mention the ticket/issue if applicable.

Solution

Describe the implemented solution. Add external references if needed.

Screenshot/Demo

A picture is worth a thousand words. Please highlight the changes if applicable.

How to test

  • Steps to be followed to verify the solution or code changes
  • Mention if there is any settings configuration added/changed/deleted

Checklist

  • I have run this code and it appears to resolve the stated issue
  • README.md updated and added information about my change

Important

Refactor codebase to remove VSCode dependencies, improve async operation handling, and introduce new features like project health check and diagnostics output channel.

  • Refactor:
    • Replace VSCode-specific cancellation tokens with AbortController and AbortSignal in commandProcessExecution.ts and sqlLineagePanel.ts.
    • Use string paths instead of VSCode Uri objects for project directories in dbtCloudIntegration.ts and dbtCoreIntegration.ts.
    • Centralize configuration access via DBTConfiguration interface and VSCodeDBTConfiguration implementation.
    • Remove legacy dynamic imports and consolidate Python integration scripts in dbt_core_integration.py.
    • Introduce diagnosticsOutputChannel.ts for improved diagnostic logging.
  • Bug Fixes:
    • Improve async operation cancellation reliability, especially during schema fetching in sqlLineagePanel.ts.
  • Tests:
    • Update tests to use string-based workspace paths and align with refactored terminal implementations.
    • Add tests for diagnostics output channel functionality.
  • Documentation:
    • Expand and reorganize CLAUDE.md with detailed architecture and development guidance.
  • Chores:
    • Add .claude to .gitignore to exclude related files from version control.

This description was created by Ellipsis for 227c602. You can customize this summary. It will automatically update as commits are pushed.


Summary by CodeRabbit

  • New Features

    • Introduced a diagnostics output channel for improved logging and troubleshooting within the extension.
    • Added a new authentication service for Altimate AI key management and user prompts.
    • Implemented a manifest parser for more efficient project manifest handling.
    • Provided runtime Python environment provider classes for enhanced environment management.
  • Refactor

    • Unified and simplified dependency injection for terminal and configuration services.
    • Centralized authentication and preview feature checks to a dedicated service.
    • Streamlined diagnostic and error handling across commands and services.
    • Consolidated and modernized project integration logic for better maintainability.
    • Migrated imports to a unified external integration package for consistency.
    • Delegated HTTP request handling to a dedicated client service for cleaner architecture.
    • Replaced cancellation tokens with abort signals for improved async operation control.
    • Introduced serialized command queue for orderly dbt command execution.
  • Bug Fixes

    • Improved cancellation handling for long-running operations.
    • Enhanced error messages and user prompts for missing credentials or configuration.
  • Chores

    • Removed unused or redundant utilities, exceptions, and Python dialect files.
    • Deleted legacy dbt integration Python scripts and SQL dialect implementations.
    • Updated configuration and test files to align with new dependency structure.
    • Removed obsolete source and target watcher modules.
    • Added .claude to .gitignore to exclude related files.
  • Tests

    • Added tests for the new diagnostics output channel.
    • Updated and removed obsolete test suites to reflect refactored services.
    • Adjusted tests to use new dependency injection and external integration imports.
  • Documentation

    • Expanded and reorganized internal documentation for clarity and completeness.

@mdesmet mdesmet requested a review from saravmajestic June 24, 2025 06:07
Copy link
Contributor

coderabbitai bot commented Jun 24, 2025

Important

Review skipped

Review was skipped as selected files did not have any reviewable changes.

💤 Files selected but had no reviewable changes (77)
  • package.json
  • src/autocompletion_provider/docAutocompletionProvider.ts
  • src/autocompletion_provider/macroAutocompletionProvider.ts
  • src/autocompletion_provider/modelAutocompletionProvider.ts
  • src/autocompletion_provider/sourceAutocompletionProvider.ts
  • src/code_lens_provider/cteCodeLensProvider.ts
  • src/code_lens_provider/index.ts
  • src/code_lens_provider/virtualSqlCodeLensProvider.ts
  • src/commands/altimateScan.ts
  • src/commands/bigQueryCostEstimate.ts
  • src/commands/index.ts
  • src/commands/runModel.ts
  • src/commands/sqlToModel.ts
  • src/commands/tests/scanContext.ts
  • src/commands/tests/staleModelColumnTest.ts
  • src/commands/validateSql.ts
  • src/commands/walkthroughCommands.ts
  • src/content_provider/sqlPreviewContentProvider.ts
  • src/dbtPowerUserExtension.ts
  • src/dbt_client/datapilot.ts
  • src/dbt_client/dbtProject.ts
  • src/dbt_client/dbtProjectContainer.ts
  • src/dbt_client/dbtProjectLog.ts
  • src/dbt_client/dbtWorkspaceFolder.ts
  • src/dbt_client/event/manifestCacheChangedEvent.ts
  • src/dbt_client/event/projectConfigChangedEvent.ts
  • src/dbt_client/event/runResultsEvent.ts
  • src/dbt_client/index.ts
  • src/dbt_client/pythonEnvironment.ts
  • src/dbt_client/runtimePythonEnvironmentProvider.ts
  • src/definition_provider/docDefinitionProvider.ts
  • src/definition_provider/macroDefinitionProvider.ts
  • src/definition_provider/modelDefinitionProvider.ts
  • src/definition_provider/sourceDefinitionProvider.ts
  • src/document_formatting_edit_provider/dbtDocumentFormattingEditProvider.ts
  • src/hover_provider/depthDecorationProvider.ts
  • src/hover_provider/modelHoverProvider.ts
  • src/hover_provider/sourceHoverProvider.ts
  • src/hover_provider/utils.ts
  • src/inversify.config.ts
  • src/mcp/server.ts
  • src/modules.ts
  • src/quickpick/index.ts
  • src/quickpick/projectQuickPick.ts
  • src/quickpick/sqlQuickPick.ts
  • src/services/dbtLineageService.ts
  • src/services/dbtTestService.ts
  • src/services/deferToProdService.ts
  • src/services/docGenService.ts
  • src/services/queryAnalysisService.ts
  • src/services/queryManifestService.ts
  • src/services/usersService.ts
  • src/statusbar/deferToProductionStatusBar.ts
  • src/statusbar/targetStatusBar.ts
  • src/statusbar/versionStatusBar.ts
  • src/test/mock/vscode.ts
  • src/test/suite/cteCodeLensProvider.test.ts
  • src/test/suite/dbtCloudDetection.test.ts
  • src/test/suite/dbtCoreDetection.test.ts
  • src/test/suite/dbtIntegration.test.ts
  • src/test/suite/dbtProjectContainer.test.ts
  • src/treeview_provider/modelTreeviewProvider.ts
  • src/webview_provider/DbtDocsView.ts
  • src/webview_provider/altimateWebviewProvider.ts
  • src/webview_provider/datapilotPanel.ts
  • src/webview_provider/docsEditPanel.ts
  • src/webview_provider/insightsPanel.ts
  • src/webview_provider/lineagePanel.ts
  • src/webview_provider/modelGraphViewPanel.ts
  • src/webview_provider/newDocsGenPanel.ts
  • src/webview_provider/newLineagePanel.ts
  • src/webview_provider/queryResultPanel.ts
  • src/webview_provider/sqlLineagePanel.ts
  • webpack.config.js
  • webview_panels/src/modules/defer/DeferToProduction.tsx
  • webview_panels/src/modules/defer/ManifestSelection.tsx
  • webview_panels/src/modules/defer/types.ts
⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

This update refactors and modernizes the extension’s dependency injection, configuration, and integration architecture. It introduces new service abstractions for authentication and diagnostics, replaces direct service instantiations with dependency-injected singletons, migrates integration logic to an external package, and removes legacy dialect and SQL validation Python modules. Extensive updates unify cancellation handling, error reporting, and configuration access across the codebase.

Changes

File(s) / Group Change Summary
src/manifest/dbtProject.ts Major refactor: uses integration adapter, adds command queue, unifies diagnostics, enforces authentication, modernizes cancellation, improves error handling, and updates method signatures.
src/inversify.config.ts Refactored DI container: binds new singletons, factories, and adapters; updates parameter types; centralizes integration management.
src/altimate.ts Refactored AltimateRequest to delegate HTTP/config to AltimateHttpClient and DBTConfiguration; removes credential logic and error classes.
src/services/altimateAuthService.ts New class for authentication/config validation and user prompts for Altimate integration.
src/services/diagnosticsOutputChannel.ts New class for structured logging to a VSCode output channel, with block and header formatting.
src/manifest/manifestParser.ts New ManifestParser class for manifest parsing, telemetry, and event emission.
src/manifest/runtimePythonEnvironmentProvider.ts New classes for runtime Python environment provisioning and change notification.
src/dbt_client/vscodeConfiguration.ts New VSCodeDBTConfiguration class for accessing dbt-related settings from VSCode config.
src/manifest/dbtProjectLog.ts Removes DBTProjectLogFactory; adjusts imports.
src/manifest/dbtProjectContainer.ts Updates injection, changes healthcheck param type, and adjusts imports.
src/manifest/event/runResultsEvent.ts Changes constructor: replaces file: Uri with optional uniqueIds: string[].
src/manifest/parsers/index.ts Refactors to use new ManifestParser; removes manual manifest reading and parser dependencies.
src/manifest/modules/sourceFileWatchers.ts, src/manifest/modules/targetWatchers.ts Removed: deletes source and target file watcher classes.
src/manifest/parsers/utils.ts Removed: deletes createFullPathForNode utility.
src/exceptions/ (all files), src/constants.ts Removed: deletes custom exception classes and constants.
src/commands/index.ts Refactors diagnostics command to use DiagnosticsOutputChannel instead of DBTTerminal.
src/commands/*, src/services/*, src/webview_provider/*, src/comment_provider/*, ... Updates import paths to use @altimateai/dbt-integration, applies DI decorators, adds/updates service dependencies, and modernizes cancellation handling.
src/dbt_client/*, src/definition_provider/*, src/hover_provider/*, src/treeview_provider/* Updates imports, DI, and method signatures for new integration structure.
src/utils.ts Removes utility functions: notEmpty, processStreamResponse, and getExternalProjectNamesFromDbtLoomConfig.
src/content_provider/sqlPreviewContentProvider.ts Switches to DbtIntegrationClient, updates method signatures and event handling.
src/modules.ts Updates re-exports to use external integration package; adds inject export.
src/test/suite/* Updates imports, mocks, and test logic for new DI structure; removes/rewrites tests for removed/changed logic.
dbt_core_integration.py, dbt_healthcheck.py Removes all SQL validation and healthcheck Python logic.
altimate_packages/altimate/*, altimate_packages/sqlglot/* Removes all SQL dialect, parsing, validation, and dataframe code.
webpack.config.js, tsconfig.json Updates path aliases and build config for new integration package; removes obsolete Python files from build.
CLAUDE.md Expands and reorganizes documentation for clarity and completeness.

Sequence Diagram(s)

sequenceDiagram
    participant VSCodeExt as VSCode Extension
    participant DI as Dependency Injection
    participant DBTProject as DBTProject
    participant IntegrationAdapter as DBTProjectIntegrationAdapter
    participant AuthService as AltimateAuthService
    participant Diagnostics as DiagnosticsOutputChannel

    VSCodeExt->>DI: Resolve DBTProject (with injected dependencies)
    VSCodeExt->>DBTProject: Call method (e.g., runModel, validateSql)
    DBTProject->>AuthService: Check authentication (isAuthenticated)
    alt Authenticated
        DBTProject->>IntegrationAdapter: Delegate command (run/build/validate)
        IntegrationAdapter-->>DBTProject: Return command object
        DBTProject->>DBTProject: Enqueue command in queue
        DBTProject->>DBTProject: Sequentially execute command
        DBTProject->>Diagnostics: Log output and diagnostics
    else Not Authenticated
        DBTProject->>AuthService: Prompt user for credentials
    end
Loading

Possibly related PRs

  • #1459: Refactors refreshProjectConfig in dbt cloud integration, directly related to integration management changes.
  • #1678: Introduces and extends "fusion" dbt integration mode, overlapping with integration abstraction and DI updates.
  • #1611: Refactors DBTProject to introduce unsafeImmediately methods, directly related to command execution refactoring.

Suggested labels

codex

Suggested reviewers

  • anandgupta42

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed everything up to 54d3164 in 1 minute and 26 seconds. Click for details.
  • Reviewed 1054 lines of code in 12 files
  • Skipped 0 files when reviewing.
  • Skipped posting 3 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. src/manifest/dbtWorkspaceFolder.ts:158
  • Draft comment:
    Consider replacing the use of splitting the URI path (i.e. uri.path.split("") and slicing) with a call to path.dirname(uri.fsPath) for extracting the parent directory. This will improve cross‐platform compatibility (especially on Windows).
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
2. src/manifest/dbtProject.ts:1297
  • Draft comment:
    Add an explicit return type to the static utility function readAndParseProjectConfig to improve clarity and ease future refactorings.
  • Reason this comment was not posted:
    Comment was on unchanged code.
3. src/dbt_client/dbtCloudIntegration.ts:496
  • Draft comment:
    Typographical suggestion: In the error message, consider capitalizing 'cli' to 'CLI' (i.e., "Unable to parse dbt Cloud CLI response") and inserting a comma after 'persists' to improve clarity (e.g., "If the problem persists, please reach out to us:").
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.

Workflow ID: wflow_aTRJ1uQ6KtOjJHod

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/dbt_client/dbtFusionCommandIntegration.ts (1)

127-129: Consider using camelCase for the AbortController property.

The cancellation mechanism is correctly implemented, but the property name rebuildManifestAbortController should follow TypeScript naming conventions.

Consider declaring this property with a proper type annotation in the class definition for better type safety.

Also applies to: 136-137

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 00ae93d and 54d3164.

📒 Files selected for processing (12)
  • src/commands/validateSql.ts (3 hunks)
  • src/dbt_client/dbtCloudIntegration.ts (16 hunks)
  • src/dbt_client/dbtCoreCommandIntegration.ts (4 hunks)
  • src/dbt_client/dbtCoreIntegration.ts (5 hunks)
  • src/dbt_client/dbtFusionCommandIntegration.ts (10 hunks)
  • src/dbt_client/dbtIntegration.ts (16 hunks)
  • src/inversify.config.ts (3 hunks)
  • src/manifest/dbtProject.ts (7 hunks)
  • src/manifest/dbtWorkspaceFolder.ts (3 hunks)
  • src/services/dbtLineageService.ts (1 hunks)
  • src/test/suite/dbtIntegration.test.ts (1 hunks)
  • src/webview_provider/sqlLineagePanel.ts (1 hunks)
🧰 Additional context used
📓 Path-based instructions (5)
`src/test/**`: All unit tests and mock infrastructure must be placed in this directory.

src/test/**: All unit tests and mock infrastructure must be placed in this directory.

  • src/test/suite/dbtIntegration.test.ts
`src/inversify.config.ts`: All service dependencies must be registered in this file using Inversify for dependency injection.

src/inversify.config.ts: All service dependencies must be registered in this file using Inversify for dependency injection.

  • src/inversify.config.ts
`src/dbt_client/dbtCoreIntegration.ts`: Implements dbt Core Python integration via the Python bridge.

src/dbt_client/dbtCoreIntegration.ts: Implements dbt Core Python integration via the Python bridge.

  • src/dbt_client/dbtCoreIntegration.ts
`src/dbt_client/dbtFusionCommandIntegration.ts`: Implements dbt Fusion CLI integration.

src/dbt_client/dbtFusionCommandIntegration.ts: Implements dbt Fusion CLI integration.

  • src/dbt_client/dbtFusionCommandIntegration.ts
`src/dbt_client/dbtCloudIntegration.ts`: Implements dbt Cloud API integration.

src/dbt_client/dbtCloudIntegration.ts: Implements dbt Cloud API integration.

  • src/dbt_client/dbtCloudIntegration.ts
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: test (ubuntu-latest)
  • GitHub Check: test (windows-latest)
  • GitHub Check: build (windows-latest)
🔇 Additional comments (40)
src/test/suite/dbtIntegration.test.ts (1)

72-72: LGTM: Test parameter correctly updated for refactored constructor.

The change from Uri.file("/test/workspace") to "/test/workspace" properly reflects the updated CLIDBTCommandExecutionStrategy constructor signature that now expects a string path instead of a Uri object.

src/inversify.config.ts (3)

141-141: LGTM: Correct path conversion for CLIDBTCommandExecutionStrategy.

The change to projectRoot.fsPath properly converts the Uri parameter to a string path as expected by the updated constructor signature.


226-226: LGTM: Correct path conversion for DBTFusionCommandProjectIntegration.

The change to projectRoot.fsPath properly converts the Uri parameter to a string path as expected by the updated constructor signature.


251-251: LGTM: Correct path conversion for DBTCloudProjectIntegration.

The change to projectRoot.fsPath properly converts the Uri parameter to a string path as expected by the updated constructor signature.

src/webview_provider/sqlLineagePanel.ts (1)

176-181: LGTM: Proper cancellation bridging with AbortController.

The implementation correctly bridges VSCode's CancellationToken with the standard AbortController/AbortSignal pattern. The onCancellationRequested callback properly triggers abort() on the controller, ensuring cancellation propagates to getNodesWithDBColumns.

src/services/dbtLineageService.ts (1)

256-262: LGTM: Consistent cancellation bridging implementation.

The AbortController pattern correctly bridges the VSCode CancellationTokenSource.token with the standard AbortSignal expected by getNodesWithDBColumns. This follows the same reliable pattern used elsewhere in the codebase.

src/commands/validateSql.ts (1)

122-122: LGTM: Proper scoped cancellation handling.

The AbortController is correctly scoped within the progress callback and properly bridges the VSCode cancellation token to the AbortSignal. The non-null assertion is safe since the controller is guaranteed to be initialized before the call to getNodesWithDBColumns.

Also applies to: 132-133, 164-164

src/manifest/dbtWorkspaceFolder.ts (1)

179-179: LGTM! Proper path type conversions.

The conversions between Uri objects and string paths are implemented correctly, properly decoupling VSCode-specific types from the dbt integration layer.

Also applies to: 190-191, 231-231

src/dbt_client/dbtCoreIntegration.ts (2)

176-229: Path handling properly updated to use strings.

The method signature and implementation correctly handle the transition from Uri objects to string paths, with proper conversions only where necessary.


980-1004: Cancellation handling correctly updated to AbortSignal.

The method now uses the standard AbortSignal API instead of VSCode's CancellationToken, properly checking the aborted property.

src/dbt_client/dbtCoreCommandIntegration.ts (2)

54-62: AbortController implementation and code simplification look good.

The cancellation mechanism is properly updated to use AbortController, and the column type mapping is correctly simplified.

Also applies to: 96-96


403-459: Method signature properly updated for AbortSignal.

The cancellation parameter is correctly changed to AbortSignal and properly passed through to the command execution.

src/dbt_client/dbtFusionCommandIntegration.ts (4)

72-87: Path handling correctly updated to strings.

The method signature and implementation properly use string paths instead of Uri objects.


104-108: Path initialization simplified correctly.

Using join() directly with string paths is cleaner than Uri operations.


211-211: Uri conversions properly handled for VSCode APIs.

The Uri.file() conversions are correctly applied when interfacing with VSCode's diagnostics API.

Also applies to: 225-225


258-266: Cancellation handling and code simplification look good.

The AbortController usage in executeSQL and the AbortSignal parameter in getBulkSchemaFromDB are correctly implemented. The column type mapping simplification is also appropriate.

Also applies to: 301-301, 383-383, 416-416

src/manifest/dbtProject.ts (3)

438-440: Path parameter correctly updated.

The method now passes the string path using fsPath property, aligning with the updated readAndParseProjectConfig signature.


1296-1300: Static method signature properly updated.

The method now accepts a string path instead of a Uri object, simplifying the path handling.


978-989: Cancellation handling correctly migrated to AbortSignal.

All methods properly use the standard AbortSignal API, with correct propagation and checking of the aborted property throughout the async operations.

Also applies to: 1609-1609, 1683-1689, 1723-1729, 1735-1735

src/dbt_client/dbtCloudIntegration.ts (13)

147-163: LGTM! Clean migration from Uri to string paths.

The refactoring correctly replaces VSCode's Uri with standard string paths and uses Node.js path module for path operations.


186-186: Property correctly renamed to match AbortController type.

The property name change from rebuildManifestCancellationTokenSource to rebuildManifestAbortController properly reflects the migration to standard AbortController API.


192-224: Constructor properly updated for string-based paths.

The constructor correctly accepts string paths instead of Uri objects, and all internal usages are updated consistently.


262-271: Correct implementation of AbortController pattern.

The method properly creates an AbortController and passes its signal, following the standard cancellation pattern.


302-303: Good cleanup of unused parameter.

Removing the unused second parameter in the map function improves code clarity.


331-331: Parameter correctly prefixed to indicate unused status.

Using _targetName follows the convention for unused parameters in unimplemented methods.


384-386: Proper conversion to Uri for VSCode diagnostic API.

The method correctly converts the string path to Uri when interfacing with VSCode's diagnostic collection API.


393-404: Well-implemented cancellation handling with AbortController.

The method properly manages the AbortController lifecycle by aborting any existing controller before creating a new one, preventing concurrent manifest rebuilds.


478-478: Consistent Uri conversion pattern for diagnostics.

The method maintains the pattern of converting string paths to Uri only when interfacing with VSCode diagnostic APIs.

Also applies to: 492-492


868-869: Method signature properly updated for AbortSignal.

The parameter type change from CancellationToken to AbortSignal is consistent with the overall refactoring, and the signal is correctly propagated.

Also applies to: 906-906


1028-1051: Path operations correctly migrated to Node.js path module.

All Uri.joinPath operations are properly replaced with path.join using string paths.


1156-1163: Appropriate Uri conversion for file system operations.

The method correctly converts string paths to Uri objects when interfacing with VSCode's file system API.


824-826: ```shell
#!/bin/bash

Show the definition of getBulkCompiledSQL to inspect parameters and signal handling

rg -n -A10 -B5 "getBulkCompiledSQL" src/dbt_client/dbtCloudIntegration.ts


</details>
<details>
<summary>src/dbt_client/dbtIntegration.ts (8)</summary>

`26-38`: **Interfaces correctly updated to use AbortSignal.**

The migration from CancellationToken to AbortSignal in the interfaces is consistent and follows web standards.

---

`50-51`: **Constructor correctly uses string path for cwd.**

The change from Uri to string for the working directory is consistent with removing VSCode dependencies.

---

`65-73`: **Good adapter pattern for backwards compatibility.**

The `convertAbortSignalToCancellationToken` method provides a clean bridge between the new AbortSignal API and the existing command execution infrastructure that expects CancellationToken format.



Also applies to: 99-110

---

`213-238`: **DBTCommand class properly updated for AbortSignal.**

The class correctly stores and propagates AbortSignal instead of CancellationToken.

---

`290-290`: **Interface method signature correctly updated.**

The parameter type change from Uri[] to string[] is consistent with removing VSCode dependencies.

---

`397-397`: **Interface method correctly uses AbortSignal.**

The parameter type change in `getBulkSchemaFromDB` is consistent with the migration to standard web APIs.

---

`480-486`: **Queue execution properly handles AbortSignal.**

The command queue correctly propagates AbortSignal through the execution chain.



Also applies to: 498-500

---

`527-529`: **Excellent bridging pattern for VSCode cancellation tokens.**

The code properly creates AbortControllers and connects them to VSCode's cancellation tokens, enabling seamless integration between the two cancellation mechanisms.



Also applies to: 558-560

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Changes requested ❌

Reviewed a1b6bd0 in 1 minute and 41 seconds. Click for details.
  • Reviewed 96 lines of code in 2 files
  • Skipped 0 files when reviewing.
  • Skipped posting 1 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. src/dbt_client/dbtIntegration.ts:62
  • Draft comment:
    Good refactor: the duplicate implementations of convertAbortSignalToCancellationToken have been removed and centralized via an import from utils. Ensure that the imported function meets the expected cancellation token interface.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50% None

Workflow ID: wflow_4q2akWP6SFyTElKc

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

src/utils.ts Outdated
@@ -17,6 +18,20 @@ import {
TestMetadataRelationships,
} from "./domain";

export function convertAbortSignalToCancellationToken(
signal: AbortSignal,
): any {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider specifying an explicit return type for 'convertAbortSignalToCancellationToken' instead of using 'any' to improve type safety and ease future refactoring.

Suggested change
): any {
): CancellationToken {

This comment was generated because it violated a code review rule: mrule_lKhrJQCKUgYAxwcS.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/utils.ts (1)

12-12: Consider removing unused import.

The CancellationToken import is not used since the function returns any. Either use it for proper typing or remove it to keep imports clean.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 54d3164 and a1b6bd0.

📒 Files selected for processing (2)
  • src/dbt_client/dbtIntegration.ts (17 hunks)
  • src/utils.ts (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/dbt_client/dbtIntegration.ts
⏰ Context from checks skipped due to timeout of 90000ms (5)
  • GitHub Check: test (windows-latest)
  • GitHub Check: test (macos-latest)
  • GitHub Check: test (ubuntu-latest)
  • GitHub Check: build (windows-latest)
  • GitHub Check: Analyze (javascript-typescript)

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Changes requested ❌

Reviewed e073aec in 1 minute and 44 seconds. Click for details.
  • Reviewed 42 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 0 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.

Workflow ID: wflow_57cWxAbkeoI5XTlp

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

src/utils.ts Outdated
listener(null);
}
};
signal.addEventListener("abort", handler);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When converting an AbortSignal to a CancellationToken, if the signal is already aborted the registered listener will never be invoked. To better mimic VS Code's CancellationToken behavior (which fires callbacks immediately when already cancelled), consider checking if signal.aborted is true and invoking the listener (perhaps asynchronously) before adding the event listener.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed 36bbfd0 in 2 minutes and 1 seconds. Click for details.
  • Reviewed 776 lines of code in 9 files
  • Skipped 0 files when reviewing.
  • Skipped posting 5 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. src/manifest/dbtWorkspaceFolder.ts:70
  • Draft comment:
    The condition that checks if the number of allowed folders equals the non‐filtered list appears inverted. Currently it warns when both arrays have the same length, meaning no folders were filtered out. Consider revising this so that the warning is issued only when some non‐existent folders are filtered out. Also, 'nonFilteredAlolowListFolders' is misspelled; it should be 'nonFilteredAllowListFolders'.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
2. src/services/dbtLineageService.ts:255
  • Draft comment:
    Several utility methods (for example, in getConnectedColumns) lack explicit return type annotations. Adding explicit return types will make refactoring easier and improve overall type safety.
  • Reason this comment was not posted:
    Comment was on unchanged code.
3. src/treeview_provider/modelTreeviewProvider.ts:93
  • Draft comment:
    For the overridden methods getTreeItem and getChildren, please consider explicitly annotating their return types. This will improve type clarity and assist future refactoring.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
4. Overall:0
  • Draft comment:
    Excellent refactoring to centralize cancellation logic using AbortController and reduce VSCode‐specific dependencies. As a further improvement, ensure that all new utility functions and methods include explicit return types for better maintainability.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
5. src/dbt_client/dbtCoreIntegration.ts:517
  • Draft comment:
    Typo: "occured" should be "occurred".
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.

Workflow ID: wflow_tZP41BGJdJ5RU0To

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (1)
src/dbt_client/dbtCloudIntegration.ts (1)

12-12: Critical: Missing diagnostics module prevents compilation.

Same issue as in dbtCoreIntegration.ts - the ./diagnostics module import is causing compilation failures.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e073aec and 36bbfd0.

📒 Files selected for processing (9)
  • src/commands/validateSql.ts (3 hunks)
  • src/dbt_client/dbtCloudIntegration.ts (19 hunks)
  • src/dbt_client/dbtCoreCommandIntegration.ts (4 hunks)
  • src/dbt_client/dbtCoreIntegration.ts (12 hunks)
  • src/dbt_client/dbtIntegration.ts (18 hunks)
  • src/manifest/dbtProject.ts (13 hunks)
  • src/manifest/dbtWorkspaceFolder.ts (3 hunks)
  • src/services/dbtLineageService.ts (1 hunks)
  • src/treeview_provider/modelTreeviewProvider.ts (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/treeview_provider/modelTreeviewProvider.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/services/dbtLineageService.ts
  • src/commands/validateSql.ts
  • src/manifest/dbtWorkspaceFolder.ts
  • src/dbt_client/dbtCoreCommandIntegration.ts
🧰 Additional context used
📓 Path-based instructions (2)
`src/dbt_client/dbtCoreIntegration.ts`: Implements dbt Core Python integration via the Python bridge.

src/dbt_client/dbtCoreIntegration.ts: Implements dbt Core Python integration via the Python bridge.

  • src/dbt_client/dbtCoreIntegration.ts
`src/dbt_client/dbtCloudIntegration.ts`: Implements dbt Cloud API integration.

src/dbt_client/dbtCloudIntegration.ts: Implements dbt Cloud API integration.

  • src/dbt_client/dbtCloudIntegration.ts
🪛 GitHub Check: test (macos-latest)
src/dbt_client/dbtCoreIntegration.ts

[failure] 13-13:
Cannot find module './diagnostics' or its corresponding type declarations.

src/dbt_client/dbtCloudIntegration.ts

[failure] 12-12:
Cannot find module './diagnostics' or its corresponding type declarations.

src/manifest/dbtProject.ts

[failure] 350-350:
Parameter 'data' implicitly has an 'any' type.


[failure] 337-337:
Parameter 'data' implicitly has an 'any' type.

src/dbt_client/dbtIntegration.ts

[failure] 26-26:
Cannot find module './diagnostics' or its corresponding type declarations.

🪛 GitHub Check: test (ubuntu-latest)
src/dbt_client/dbtCoreIntegration.ts

[failure] 13-13:
Cannot find module './diagnostics' or its corresponding type declarations.

src/dbt_client/dbtCloudIntegration.ts

[failure] 12-12:
Cannot find module './diagnostics' or its corresponding type declarations.

src/manifest/dbtProject.ts

[failure] 350-350:
Parameter 'data' implicitly has an 'any' type.


[failure] 337-337:
Parameter 'data' implicitly has an 'any' type.

src/dbt_client/dbtIntegration.ts

[failure] 26-26:
Cannot find module './diagnostics' or its corresponding type declarations.

🪛 GitHub Actions: Tests
src/dbt_client/dbtCloudIntegration.ts

[error] 12-12: TypeScript error TS2307: Cannot find module './diagnostics' or its corresponding type declarations.

⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: build (windows-latest)
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (23)
src/dbt_client/dbtCoreIntegration.ts (6)

177-230: LGTM: Clean refactoring from Uri to string paths.

The method signature change from Uri[] to string[] is properly implemented. The internal logic correctly handles string paths and the fallback mechanism using Uri.file() maintains compatibility where Uri objects are still needed.


257-258: LGTM: Diagnostic data arrays properly initialized.

The addition of pythonBridgeDiagnosticsData and rebuildManifestDiagnosticsData arrays provides structured diagnostic data storage alongside the existing VSCode diagnostic collections.


520-529: LGTM: Proper diagnostic data structure creation.

The diagnostic data object creation follows a consistent pattern with all required fields properly populated. The structured approach improves diagnostic data management.


619-624: LGTM: Well-structured diagnostic result method.

The getDiagnostics() method provides a clean interface for accessing diagnostic data in a structured format, improving upon the previous approach.


991-1013: LGTM: Correct AbortSignal implementation.

The cancellation handling has been properly updated from CancellationToken to AbortSignal. The check for signal.aborted is the correct way to handle cancellation with the AbortController API.


1156-1157: LGTM: Consistent diagnostic cleanup.

The diagnostic data arrays are properly cleared during disposal, maintaining consistency with the existing diagnostic collection cleanup.

src/dbt_client/dbtCloudIntegration.ts (8)

148-164: LGTM: Consistent path handling refactoring.

The discoverProjects method signature change from Uri[] to string[] is implemented consistently with the pattern used in dbtCoreIntegration.ts.


187-189: LGTM: Proper AbortController and diagnostic array initialization.

The renaming from rebuildManifestCancellationTokenSource to rebuildManifestAbortController correctly reflects the new cancellation pattern, and the diagnostic data arrays are properly initialized.


196-221: LGTM: Constructor properly updated for string paths.

The constructor parameter change from Uri to string for projectRoot is consistently handled throughout the constructor, with proper string-based path usage.


264-313: LGTM: AbortController correctly implemented in executeSQL.

The replacement of CancellationTokenSource with AbortController is properly implemented. The signal is correctly passed to the command execution and the abort mechanism is properly set up for query cancellation.


333-333: Good practice: Underscore prefix indicates unused parameter.

Renaming the parameter to _targetName clearly indicates this parameter is intentionally unused, which is good practice for method signature compliance.


384-389: LGTM: Consistent diagnostic result interface.

The getDiagnostics() method implementation matches the pattern established in dbtCoreIntegration.ts, providing a unified interface for diagnostic data access.


457-542: LGTM: Comprehensive diagnostic data handling in rebuildManifest.

The diagnostic data creation and management in the rebuildManifest method is thorough and well-structured. Both error and warning cases are properly handled with appropriate diagnostic data creation.


900-948: LGTM: AbortSignal properly passed to command execution.

The getBulkSchemaFromDB method correctly accepts an AbortSignal parameter and passes it to the command execution, maintaining the cancellation capability in the new pattern.

src/manifest/dbtProject.ts (4)

1037-1048: LGTM: Cancellation handling migration looks correct.

The migration from CancellationToken to AbortSignal is implemented correctly. The parameter name change and cancellation check are consistent with the new pattern.


1356-1367: LGTM: Path handling migration from Uri to string.

The change from Uri parameter to plain string path is correctly implemented. The path handling logic properly uses the string parameter instead of .fsPath.


1666-1796: LGTM: Consistent AbortSignal usage with proper cancellation checks.

The cancellation handling throughout this method is correctly updated:

  • Parameter changed from CancellationToken to AbortSignal
  • Cancellation checks changed from cancellationToken.isCancellationRequested to signal.aborted
  • The logic maintains the same early-return behavior when cancelled

1845-1875: Improved diagnostic error handling approach.

The new implementation provides a more comprehensive approach to diagnostic error checking by:

  • Aggregating diagnostics from both integration sources and VSCode collections
  • Checking all diagnostic types for errors before throwing
  • Replacing the previous delegated error checking with local implementation

This aligns well with the goal of reducing VSCode dependencies.

src/dbt_client/dbtIntegration.ts (5)

28-41: LGTM: Interface signature updates for AbortSignal.

The DBTCommandExecution and DBTCommandExecutionStrategy interfaces are correctly updated to use AbortSignal instead of CancellationToken. The parameter names and types are consistent.


56-105: LGTM: Comprehensive AbortSignal integration in CLI strategy.

The CLIDBTCommandExecutionStrategy class correctly:

  • Updates method signatures to accept AbortSignal
  • Collects multiple abort signals into an array
  • Uses the convertAbortSignalToCancellationToken utility to bridge to the legacy API
  • Updates the cwd property from Uri to string

The implementation maintains backward compatibility while adopting the new cancellation pattern.


119-163: LGTM: Consistent AbortSignal pattern in Python strategy.

The PythonDBTCommandExecutionStrategy follows the same pattern as the CLI strategy:

  • Method signatures updated to use AbortSignal
  • Signal collection and conversion logic is identical
  • Proper use of the utility function for bridging

The consistency between strategies is good for maintainability.


317-393: LGTM: Interface refactoring aligns with dependency removal goals.

The DBTProjectIntegration interface changes are well-designed:

  • Removes extends Disposable but retains explicit dispose() method
  • Updates getBulkSchemaFromDB to use AbortSignal
  • Changes getDiagnostics() to return structured DBTDiagnosticResult
  • Updates discoverProjects to use string paths instead of Uri

These changes support the goal of reducing VSCode-specific dependencies while maintaining functionality.


507-512: LGTM: Proper AbortController bridging pattern.

The implementation correctly creates an AbortController to bridge VSCode's cancellation token to the new AbortSignal pattern. This maintains compatibility with VSCode's progress API while using the standardized cancellation approach internally.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Changes requested ❌

Reviewed ac5c57a in 2 minutes and 3 seconds. Click for details.
  • Reviewed 268 lines of code in 5 files
  • Skipped 0 files when reviewing.
  • Skipped posting 0 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.

Workflow ID: wflow_CPUusvs8zpfBxXEk

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

const buildModelCommandAdditionalParams = workspace
.getConfiguration("dbt")
.get<string[]>("runModelCommandAdditionalParams", []);
const buildModelCommandAdditionalParams =
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rename the variable 'buildModelCommandAdditionalParams' to 'runModelCommandAdditionalParams' in createRunModelCommand to clearly reflect that it's fetching run-specific parameters.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed d12ab35 in 1 minute and 30 seconds. Click for details.
  • Reviewed 329 lines of code in 3 files
  • Skipped 0 files when reviewing.
  • Skipped posting 3 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. src/dbt_client/dbtFusionCommandIntegration.ts:303
  • Draft comment:
    Potential logical bug: The check on previewLine length is duplicated. At line 303, the code repeats if (previewLine.length === 0) instead of verifying if compiledSqlLines is empty. Likely it should check compiledSqlLines.length to ensure a compiled SQL line is present.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
2. src/dbt_client/dbtCloudIntegration.ts:180
  • Draft comment:
    Refactored to remove VS Code diagnostic collections in favor of internal DBTDiagnosticData arrays. Ensure that all diagnostic updates and clearances are fully integrated (and tested) so that error reporting remains consistent.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
3. src/dbt_client/dbtCoreIntegration.ts:529
  • Draft comment:
    VS Code diagnostic clearing methods have been removed from this integration. Verify that clearing diagnostic data through internal arrays (e.g., rebuildManifestDiagnosticsData) effectively replaces the previous behavior, and update tests accordingly.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.

Workflow ID: wflow_ik2EtUrf9yf7L9g4

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
src/dbt_client/dbtFusionCommandIntegration.ts (1)

317-317: Consider more specific column type mapping.

The current implementation maps all columns to "string" type. Consider enhancing this to derive actual column types from the preview data if type information is available.

-                ? Object.keys(preview[0]).map(() => "string")
+                ? Object.keys(preview[0]).map((key) => {
+                    const value = preview[0][key];
+                    return typeof value === 'number' ? 'number' : 
+                           typeof value === 'boolean' ? 'boolean' : 'string';
+                  })
src/dbt_client/dbtCloudIntegration.ts (1)

288-288: Consider more specific column type mapping.

Similar to the fusion integration, this maps all columns to "string" type. Consider deriving actual types from the preview data.

-                ? Object.keys(preview[0]).map(() => "string")
+                ? Object.keys(preview[0]).map((key) => {
+                    const value = preview[0][key];
+                    return typeof value === 'number' ? 'number' : 
+                           typeof value === 'boolean' ? 'boolean' : 'string';
+                  })
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ac5c57a and d12ab35.

📒 Files selected for processing (3)
  • src/dbt_client/dbtCloudIntegration.ts (18 hunks)
  • src/dbt_client/dbtCoreIntegration.ts (12 hunks)
  • src/dbt_client/dbtFusionCommandIntegration.ts (12 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/dbt_client/dbtCoreIntegration.ts
🧰 Additional context used
📓 Path-based instructions (2)
`src/dbt_client/dbtFusionCommandIntegration.ts`: Implements dbt Fusion CLI integration.

src/dbt_client/dbtFusionCommandIntegration.ts: Implements dbt Fusion CLI integration.

  • src/dbt_client/dbtFusionCommandIntegration.ts
`src/dbt_client/dbtCloudIntegration.ts`: Implements dbt Cloud API integration.

src/dbt_client/dbtCloudIntegration.ts: Implements dbt Cloud API integration.

  • src/dbt_client/dbtCloudIntegration.ts
⏰ Context from checks skipped due to timeout of 90000ms (6)
  • GitHub Check: test (windows-latest)
  • GitHub Check: build (windows-latest)
  • GitHub Check: test (macos-latest)
  • GitHub Check: test (ubuntu-latest)
  • GitHub Check: Analyze (python)
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (12)
src/dbt_client/dbtFusionCommandIntegration.ts (5)

73-88: LGTM! Consistent path handling refactoring.

The method signature change from Uri[] to string[] and corresponding path operations using path.join() are correctly implemented and align with the PR objective of removing VSCode dependencies.


128-138: LGTM! Proper cancellation handling refactoring.

The conversion from CancellationTokenSource to AbortController is correctly implemented with proper cleanup of existing controllers before creating new ones.


189-250: LGTM! Well-structured diagnostic data handling.

The refactoring from VSCode diagnostic collections to custom DBTDiagnosticData arrays is properly implemented. The diagnostic structure with file paths, severity levels, and categorization provides good error tracking capabilities.


274-283: LGTM! Consistent AbortController pattern.

The executeSQL method correctly uses AbortController for cancellation, maintaining the same cancellation semantics as the original implementation.


513-518: LGTM! Proper diagnostic access method.

The new getDiagnostics() method provides a clean interface for accessing diagnostic data, consistent with the refactoring to custom diagnostic types.

src/dbt_client/dbtCloudIntegration.ts (7)

138-154: LGTM! Consistent project discovery refactoring.

The method signature change from Uri[] to string[] and the updated path filtering logic correctly implements the transition from VSCode-specific types to standard string paths.


173-190: LGTM! Proper constructor parameter refactoring.

The changes from Uri to string for projectRoot parameter and the initialization of diagnostic data arrays using custom types are correctly implemented.


248-256: LGTM! Consistent cancellation pattern.

The executeSQL method correctly implements the AbortController pattern, maintaining the same cancellation semantics while removing VSCode dependencies.


317-317: LGTM! Proper unused parameter indication.

Renaming the parameter to _targetName clearly indicates it's unused, which is a good practice for code clarity.


378-389: LGTM! Consistent AbortController implementation.

The rebuildManifest method correctly replaces CancellationTokenSource with AbortController, maintaining proper cleanup and cancellation handling.


441-487: LGTM! Well-structured diagnostic refactoring.

The conversion from VSCode diagnostic collections to custom DBTDiagnosticData arrays is properly implemented. The use of Uri.file() and Uri.joinPath() maintains compatibility while working with string-based project roots.


1132-1138: LGTM! Consistent path handling with Uri utilities.

The use of Uri.file() to wrap the string-based projectRoot when creating file paths maintains compatibility with VSCode file system operations while supporting the string-based refactoring.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed 54a2c33 in 2 minutes and 21 seconds. Click for details.
  • Reviewed 629 lines of code in 4 files
  • Skipped 0 files when reviewing.
  • Skipped posting 7 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. src/inversify.config.ts:213
  • Draft comment:
    Inconsistent parameter types for the project root: the factory for DBTCoreProjectIntegration expects a string while DBTFusionCommandProjectIntegration (and DBTCloudProjectIntegration) still use a Uri (accessing fsPath). Consider standardizing the parameter type (preferably a string) across integrations for consistency.
  • Reason this comment was not posted:
    Comment was on unchanged code.
2. src/manifest/dbtProject.ts:604
  • Draft comment:
    In the function findPackageName, consider using 'this.projectRoot.fsPath' instead of 'this.projectRoot' when constructing the RegExp for path replacement, to avoid potential mismatches in file path formats.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 10% vs. threshold = 50% The comment identifies a potential issue with path handling - using .fsPath is generally the correct way to get the actual filesystem path from a Uri object. However, looking at the code more carefully, this function is using uri.path rather than uri.fsPath for the input, so it's actually consistent to use this.projectRoot without .fsPath since we're working with Uri paths rather than filesystem paths. The comment may be well-intentioned but misunderstands the context. Am I certain that using uri.path and this.projectRoot without .fsPath is the correct approach here? Could there be platform-specific path issues I'm not considering? Looking at the broader context, this code is doing string manipulation on paths for package name extraction, not actual filesystem operations. The consistent use of uri.path suggests this is intentional path string handling rather than filesystem path handling. The comment should be deleted because it suggests changing path handling that is actually correct as-is for its string manipulation purpose.
3. src/manifest/dbtProject.ts:473
  • Draft comment:
    Consider adding an explicit return type to the utility function 'convertDiagnosticCollectionToDBTDiagnosticData' (e.g. DBTDiagnosticData[]) to improve type safety and aid refactoring.
  • Reason this comment was not posted:
    Comment looked like it was already resolved.
4. src/test/suite/dbtCoreIntegration.test.ts:98
  • Draft comment:
    Avoid using 'it.skip' for tests without an accompanying explanation. Skipped tests may hide regressions; consider enabling these tests or documenting the reason for skipping.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
5. src/manifest/dbtProject.ts:528
  • Draft comment:
    Typographical suggestion: Consider removing the extra space before the colon in the error message. Instead of "dbt_project.yml is invalid : " it might be clearer as "dbt_project.yml is invalid:".
  • Reason this comment was not posted:
    Comment was on unchanged code.
6. src/manifest/dbtProject.ts:535
  • Draft comment:
    Typographical suggestion: Consider removing the extra space before the colon in the error message. Instead of "dbt configuration is invalid : " it might be clearer as "dbt configuration is invalid:".
  • Reason this comment was not posted:
    Comment was on unchanged code.
7. src/manifest/dbtProject.ts:566
  • Draft comment:
    Typo: In the debug message for seedPaths undefined, the string still says "macroPaths is not defined in". It should likely be changed to "seedPaths is not defined in" to correctly reflect the condition.
  • Reason this comment was not posted:
    Comment was on unchanged code.

Workflow ID: wflow_25NBa0bxTyHDfkUH

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (2)
src/dbt_client/dbtCoreIntegration.ts (1)

2-2: Critical: Missing diagnostics module prevents compilation.

The import statement references a ./diagnostics module that doesn't exist, causing TypeScript compilation failures across the test pipeline.

#!/bin/bash
# Description: Check if the diagnostics module exists and find its correct location
# Expected: Find the diagnostics module or identify where it should be created

# Search for diagnostics-related files
fd -t f "diagnostic" --exec echo "Found: {}"

# Search for DBTDiagnosticData and DBTDiagnosticResult type definitions
rg -A 5 "interface DBTDiagnosticData|type DBTDiagnosticData|interface DBTDiagnosticResult|type DBTDiagnosticResult"
src/manifest/dbtProject.ts (1)

334-359: Fix type safety issues in diagnostic mapping functions.

The diagnostic conversion logic looks good, but there are type safety issues that need to be addressed:

  1. The data parameters in the mapping functions have implicit any types (lines 334, 350)
  2. The diagnostic data structure should be properly typed

Apply this diff to fix the type safety issues:

-      ...integrationDiagnostics.pythonBridgeDiagnostics.map(
-        (data) =>
+      ...integrationDiagnostics.pythonBridgeDiagnostics.map(
+        (data: DBTDiagnosticData) =>
           new Diagnostic(
             new Range(
               data.range?.startLine || 0,
               data.range?.startColumn || 0,
               data.range?.endLine || 999,
               data.range?.endColumn || 999,
             ),
             data.message,
             this.mapSeverityToVSCode(data.severity),
           ),
       ),
-      ...integrationDiagnostics.rebuildManifestDiagnostics.map(
-        (data) =>
+      ...integrationDiagnostics.rebuildManifestDiagnostics.map(
+        (data: DBTDiagnosticData) =>
           new Diagnostic(
             new Range(
               data.range?.startLine || 0,
               data.range?.startColumn || 0,
               data.range?.endLine || 999,
               data.range?.endColumn || 999,
             ),
             data.message,
             this.mapSeverityToVSCode(data.severity),
           ),
       ),
🧹 Nitpick comments (1)
src/test/suite/dbtCoreIntegration.test.ts (1)

17-17: Remove unused vscode import.

The languages import from VSCode is no longer used since the test now uses DBTDiagnosticData arrays instead of VSCode diagnostic collections.

-import { Uri, workspace, EventEmitter } from "vscode";
+import { Uri, workspace, EventEmitter } from "vscode";

Wait, let me check what's actually being used... Actually, Uri and EventEmitter are still used in the test, but languages is not. The import should be cleaned up:

-import { Uri, workspace, EventEmitter } from "vscode";
+import { Uri, workspace, EventEmitter } from "vscode";
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d12ab35 and 54a2c33.

📒 Files selected for processing (5)
  • .gitignore (1 hunks)
  • src/dbt_client/dbtCoreIntegration.ts (26 hunks)
  • src/inversify.config.ts (9 hunks)
  • src/manifest/dbtProject.ts (21 hunks)
  • src/test/suite/dbtCoreIntegration.test.ts (5 hunks)
✅ Files skipped from review due to trivial changes (1)
  • .gitignore
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/inversify.config.ts
🧰 Additional context used
📓 Path-based instructions (2)
`src/test/**`: All unit tests and mock infrastructure must be placed in this directory.

src/test/**: All unit tests and mock infrastructure must be placed in this directory.

  • src/test/suite/dbtCoreIntegration.test.ts
`src/dbt_client/dbtCoreIntegration.ts`: Implements dbt Core Python integration via the Python bridge.

src/dbt_client/dbtCoreIntegration.ts: Implements dbt Core Python integration via the Python bridge.

  • src/dbt_client/dbtCoreIntegration.ts
⏰ Context from checks skipped due to timeout of 90000ms (5)
  • GitHub Check: build (windows-latest)
  • GitHub Check: test (macos-latest)
  • GitHub Check: test (ubuntu-latest)
  • GitHub Check: test (windows-latest)
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (14)
src/test/suite/dbtCoreIntegration.test.ts (2)

62-63: LGTM! Mock setup properly updated.

The mock objects have been correctly updated to align with the new parameter types:

  • mockUri changed from VSCode Uri to plain string path
  • mockProjectConfigDiagnostics changed from DiagnosticCollection to DBTDiagnosticData[]

This aligns perfectly with the refactoring to remove VSCode dependencies.


79-79: LGTM! Constructor parameters correctly updated.

The constructor parameters have been properly updated to match the new DBTCoreProjectIntegration signature:

  • projectRoot parameter changed from Uri to string
  • Diagnostic parameter changed from collection to DBTDiagnosticData[]

Also applies to: 92-92

src/dbt_client/dbtCoreIntegration.ts (7)

238-239: LGTM! Diagnostic properties properly refactored.

The diagnostic properties have been correctly changed from VSCode diagnostic collections to internal DBTDiagnosticData[] arrays, aligning with the goal of removing VSCode dependencies.


248-248: LGTM! Constructor parameters align with refactoring goals.

The constructor parameters have been correctly updated:

  • projectRoot changed from Uri to string for better portability
  • projectConfigDiagnostics changed from VSCode DiagnosticCollection to DBTDiagnosticData[]

These changes support the goal of removing VSCode dependencies.

Also applies to: 256-257


496-504: LGTM! Structured diagnostic data creation.

The diagnostic data creation has been properly refactored to use the new DBTDiagnosticData structure with comprehensive fields including filePath, message, severity, range, source, and category. This provides better structure and removes VSCode dependencies.


590-595: LGTM! Clean diagnostic access API.

The new getDiagnostics() method provides a clean, structured API that returns diagnostic data in organized categories. This is a good replacement for the previous VSCode-specific diagnostic access pattern.


960-960: LGTM! Cancellation handling modernized.

The cancellation handling has been correctly updated to use standard AbortSignal instead of VSCode's CancellationToken. This improves portability and aligns with modern web standards.

Also applies to: 967-967


264-264: LGTM! Path handling consistently updated.

The path handling has been consistently updated throughout the file to use string paths instead of VSCode Uri objects. This improves portability and reduces coupling with VSCode APIs while maintaining the same functionality.

Also applies to: 273-273, 398-398, 444-444


1120-1121: LGTM! Proper diagnostic cleanup during disposal.

The disposal logic correctly clears the diagnostic data arrays, ensuring proper cleanup of resources when the integration is disposed.

src/manifest/dbtProject.ts (5)

473-495: LGTM! Useful diagnostic conversion bridge method.

The convertDiagnosticCollectionToDBTDiagnosticData() method provides a clean bridge between VSCode diagnostics and the new internal diagnostic format. The conversion logic properly maps all necessary fields including severity, range, and metadata.


1055-1055: LGTM! Cancellation handling properly modernized.

The cancellation handling has been correctly updated to use standard AbortSignal instead of VSCode's CancellationToken. The implementation properly checks signal.aborted at appropriate cancellation points, providing responsive cancellation behavior.

Also applies to: 1687-1687, 1761-1761, 1801-1801, 1813-1813


1863-1893: LGTM! Comprehensive diagnostic error checking.

The throwDiagnosticsErrorIfAvailable() method provides unified error checking across both the new internal diagnostic data and existing VSCode diagnostic collections. This ensures consistent error handling during the transition period.


132-144: LGTM! Constructor factory signatures properly updated.

The constructor factory function signatures have been correctly updated to use string paths instead of Uri objects and DBTDiagnosticData[] instead of diagnostic collections. This aligns with the refactoring goals.


177-177: LGTM! Path handling consistently updated throughout.

The path handling has been systematically updated to use string paths while maintaining compatibility with existing Uri properties. The usage of this.projectRoot.fsPath provides the necessary conversion at factory call sites.

Also applies to: 182-182, 187-187, 193-193, 516-516

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed ac765fd in 2 minutes and 16 seconds. Click for details.
  • Reviewed 381 lines of code in 6 files
  • Skipped 0 files when reviewing.
  • Skipped posting 7 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. src/dbtFusionCommandIntegration.ts:292
  • Draft comment:
    Duplicate check: The previewLine length is checked twice before proceeding. Consider removing the redundant check (lines 292 and 300) to improve clarity.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
2. src/dbtFusionCommandIntegration.ts:290
  • Draft comment:
    JSON parsing duplication: Several similar blocks parse JSON lines from stdout. Consider extracting a utility (with an explicit return type) for safe JSON parsing to reduce duplication and improve maintainability.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
3. src/dbtIntegration.ts:163
  • Draft comment:
    Python command string construction: In the method that builds the DBT command, consider refactoring the logic into a dedicated utility with robust escaping to improve clarity and prevent injection issues.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
4. src/dbtCommandExecutionInfrastructure.ts:440
  • Draft comment:
    Silent catch block: The catch block in closePythonBridge swallows errors. Consider at least logging these errors so that unexpected bridge termination issues are easier to diagnose.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
5. src/dbtIntegration.ts:788
  • Draft comment:
    Synchronous file I/O in getBulkCompiledSQL: Reading compiled SQL using readFileSync in a loop may block the event loop. Consider using asynchronous file access if performance is a concern.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
6. src/dbtCloudIntegration.ts:287
  • Draft comment:
    Typo in log message: The word 'initalize' should be 'initialize'. Please correct the spelling to improve professionalism.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
7. src/inversify.config.ts:65
  • Draft comment:
    Factory usage documentation: Several factory bindings throw errors instructing that instances be created via a dedicated factory. Consider adding documentation to explain proper factory usage for future maintainers.
  • Reason this comment was not posted:
    Comment looked like it was already resolved.

Workflow ID: wflow_SYKAVIHW8tWkckdh

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

@mdesmet mdesmet force-pushed the feat/extract-dbt-project branch from f0d86a3 to df222d7 Compare June 29, 2025 20:05
Copy link
Contributor

ellipsis-dev bot commented Jun 29, 2025

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

Copy link
Contributor

ellipsis-dev bot commented Jun 29, 2025

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

Copy link
Contributor

ellipsis-dev bot commented Jun 30, 2025

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
CONTRIBUTING.md (2)

78-82: Add a language identifier to the directory-tree code block

markdownlint flags this fenced block because it lacks a language tag (MD040).
Since it’s plain text, add text (or bash) after the opening back-ticks:

-```
+```text
 /path/to/your/projects/
 ├── altimate-dbt-integration/
 └── vscode-dbt-power-user/

114-133: Split the large webpack snippet for clarity

The single ```javascript block now mixes two unrelated edits (the alias section and the CopyWebpackPlugin section).
Readers have to scroll to find where one change ends and the next begins.

Consider separating them:

-```javascript
-// In resolve.alias section:
-...
-// In CopyWebpackPlugin, comment out production copies and uncomment development copies:
-...
-```
+
+```javascript
+// In resolve.alias section
+...
+```
+
+```javascript
+// In CopyWebpackPlugin section
+...
+```

This keeps each edit self-contained and avoids very long inline comments.
(No behavioural impact; purely documentation.)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between df222d7 and 3f68e25.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (1)
  • CONTRIBUTING.md (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: CR
PR: AltimateAI/vscode-dbt-power-user#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-24T06:08:41.902Z
Learning: Manifest-driven architecture: The extension relies on dbt's manifest.json for project structure and triggers updates across components on manifest changes.
Learnt from: CR
PR: AltimateAI/vscode-dbt-power-user#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-24T06:08:41.902Z
Learning: When extending dbt integration, update the appropriate dbt client (e.g., dbtCoreIntegration.ts), add Python bridge functions as needed, and update MCP server tools for AI accessibility.
Learnt from: CR
PR: AltimateAI/vscode-dbt-power-user#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-24T06:08:41.902Z
Learning: Testing strategy includes unit tests with Jest and ts-jest, custom VSCode API mocks, Istanbul-based coverage, and all tests are located in src/test/. Integration tests should use real dbt projects.
Learnt from: CR
PR: AltimateAI/vscode-dbt-power-user#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-24T06:08:41.902Z
Learning: The extension uses a dependency injection pattern via Inversify; all services must be registered in the DI container (src/inversify.config.ts) and injected into the main extension class (DBTPowerUserExtension).
Learnt from: CR
PR: AltimateAI/vscode-dbt-power-user#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-24T06:08:41.902Z
Learning: The extension supports multiple dbt integration types (core, cloud, fusion, CLI) and uses the strategy pattern to handle integration-specific behavior.
CONTRIBUTING.md (8)
Learnt from: CR
PR: AltimateAI/vscode-dbt-power-user#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-24T06:08:41.902Z
Learning: When extending dbt integration, update the appropriate dbt client (e.g., dbtCoreIntegration.ts), add Python bridge functions as needed, and update MCP server tools for AI accessibility.
Learnt from: CR
PR: AltimateAI/vscode-dbt-power-user#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-24T06:08:41.902Z
Learning: Manifest-driven architecture: The extension relies on dbt's manifest.json for project structure and triggers updates across components on manifest changes.
Learnt from: CR
PR: AltimateAI/vscode-dbt-power-user#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-24T06:08:41.902Z
Learning: The extension supports multiple dbt integration types (core, cloud, fusion, CLI) and uses the strategy pattern to handle integration-specific behavior.
Learnt from: CR
PR: AltimateAI/vscode-dbt-power-user#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-24T06:08:41.902Z
Learning: Testing strategy includes unit tests with Jest and ts-jest, custom VSCode API mocks, Istanbul-based coverage, and all tests are located in src/test/. Integration tests should use real dbt projects.
Learnt from: CR
PR: AltimateAI/vscode-dbt-power-user#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-24T06:08:41.902Z
Learning: The extension is distributed via a CI/CD pipeline with a build matrix for macOS, Ubuntu, and Windows, and is published to both the Visual Studio Marketplace and OpenVSX Registry.
Learnt from: CR
PR: AltimateAI/vscode-dbt-power-user#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-24T06:08:41.902Z
Learning: The extension uses a dependency injection pattern via Inversify; all services must be registered in the DI container (src/inversify.config.ts) and injected into the main extension class (DBTPowerUserExtension).
Learnt from: CR
PR: AltimateAI/vscode-dbt-power-user#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-24T06:08:41.902Z
Learning: All new language features should be implemented as providers in the appropriate *_provider/ directory, registered in inversify.config.ts, and wired up in DBTPowerUserExtension.
Learnt from: CR
PR: AltimateAI/vscode-dbt-power-user#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-24T06:08:41.902Z
Learning: Documentation is managed with MkDocs using the Material theme, organized by user workflow (develop, test, collaborate), and supports live reload for local development.
🪛 markdownlint-cli2 (0.17.2)
CONTRIBUTING.md

78-78: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)

⏰ Context from checks skipped due to timeout of 90000ms (6)
  • GitHub Check: build (windows-latest)
  • GitHub Check: build (macos-latest)
  • GitHub Check: test (windows-latest)
  • GitHub Check: test (ubuntu-latest)
  • GitHub Check: test (macos-latest)
  • GitHub Check: Analyze (javascript-typescript)

Copy link
Contributor

ellipsis-dev bot commented Jun 30, 2025

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

Copy link
Contributor

ellipsis-dev bot commented Jun 30, 2025

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

Copy link
Contributor

ellipsis-dev bot commented Jul 1, 2025

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

Copy link
Contributor

ellipsis-dev bot commented Jul 1, 2025

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

Copy link
Contributor

ellipsis-dev bot commented Jul 2, 2025

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

Copy link
Contributor

ellipsis-dev bot commented Jul 2, 2025

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

Copy link
Contributor

ellipsis-dev bot commented Jul 8, 2025

⚠️ This PR is too big for Ellipsis, but support for larger PRs is coming soon. If you want us to prioritize this feature, let us know at [email protected]


Generated with ❤️ by ellipsis.dev

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant